package jmine.tec.persist.annotation;

import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;

import jmine.tec.persist.schema.api.IndexOrder;

/**
 * Annotation que define um index. Todos os valores são opcionais, pois são deduzidos ou gerados de acordo com o local em que a anotação
 * está.
 * 
 * @author lundberg
 */
@Retention(RetentionPolicy.RUNTIME)
@Target(value = { ElementType.METHOD, ElementType.TYPE })
public @interface Index {

    /**
     * Nome do index.
     */
    String name() default "";

    /**
     * Sufixo do index, será apenas necessário informar o sufixo, e será gerado sozinho o nome do index IX_ALIAS_SUFIXO.
     */
    String suffix() default "";

    /**
     * Nome das colunas do index.
     */
    String[] columns() default {};

    /**
     * Utilizado para definir a ordem das colunas no índice. Caso existam mais colunas indexadas do que ordens, as colunas restantes terão
     * ordem não definida.
     */
    IndexOrder[] orders() default {};

    /**
     * Tablespace do índice.
     */
    String tablespace() default "";

    /**
     * Define se o index deve ser ascendente. Deve ser utilizado apenas quando o nome das colunas não for definido, irá ser aplicado ao nome
     * deduzido da coluna.
     * 
     * @deprecated Está sendo ignorado. utilize o parâmetro orders.
     */
    @Deprecated
    boolean asc() default false;
}
